草庐IT

C++11 auto 和 size_type

全部标签

C++11 从频繁变化的范围内生成随机数

问:如何从先验未知范围生成(许多)均匀分布的整数?就性能(数百万个生成的数字)而言,首选方式是什么?上下文:在我的应用程序中,我必须在许多地方生成许多伪随机数。我对生成器使用单例模式来保持应用程序运行的可重复性。在我的例子中,分布总是均匀的,但问题是有太多可能的范围来预先制作C++11风格的分布对象。我的尝试:对此有两个明显的解决方案,第一个是使用一次性分布对象,第二个是使用模数将随机数从尽可能广泛的范围转换为所需的范围。但不知何故,我怀疑这些是最好的:)#include#include#include"limits.h"usingnamespacestd;mt19937mt;unif

c++ - C++11 是否引入了不区分大小写的字符串比较算法?

刚刚在GCC4.8上迁移到C++11,并且最好从boost::iequals迁移到STL。我搜索了互联网,但没有看到任何迹象表明std::iequals或新的std::basic_string方法在STL中原生支持这一点。如果这在C++11中不存在,那么自C++03以来解决此问题的方法是否发生了变化(即不同的解决方法?),或者这里仍然首选boost?提前致谢。` 最佳答案 不,C++11没有引入不区分大小写的字符串比较函数。您现在需要坚持使用Boost。希望这对您有所帮助! 关于c++-

c++ - 为什么在 C++11/C++14 中有针对自动和大括号初始化器的特殊类型推导规则?

在他的CppCon2014演讲中"TypeDeductionandWhyYouCare",ScottMeyers提出了一个问题,为什么在C++11/C++14标准中有关于auto和大括号初始化器的特殊规则(他的问题从at36m05s开始)。auto与braced-init-list组合的语义在§7.1.6.4/6中定义。我想了想,也想不出一个用例。到目前为止,我所看到的最接近的例子是BjarneStroustrup使用它的一个例子。在他的Cpp2014talk"MakeSimpleTasksSimple!",他曾经使用auto来捕获初始化器(但只是作为一种变通方法)。这是代码(幻灯片3

c++ - 遍历动态 vector 时 auto 的异常行为

我正在使用自动遍历vector(附加代码)。在遍历的同时,我还在后面附加了一些元素。我没想到会得到这样的输出。#include#includeusingnamespacestd;vectordynamic_vector;voidaccess(){for(autoi:dynamic_vector){if(i==3){dynamic_vector.push_back(4);dynamic_vector.push_back(5);}cout输出:123我原以为从1到5的所有数字都会被打印出来。我无法理解如何使用auto进行遍历? 最佳答案

c++ - lambdas 中的模板参数列表中的 auto 是标准的一部分吗?

今天,我偶然发现了以下代码片段:#includeintmain(){autoa=[](std::pairvalue){};a(std::pair{3,true});}http://cpp.sh/5p34我只有一个问题:标准支持这段代码吗?它在GCC中编译(使用-std=c++14),但不是clang或VisualStudio2015(VC++14)。这似乎应该成为标准的一部分,因为如果lambda应该具有与常规函数相同的模板支持,那么应该支持它。这似乎可以转换为所有模板类型,而不仅仅是std::pair。 最佳答案 在C++14中,

c++ - 循环中的 Stroustrup 和溢出 size_type

我正在阅读BjarneStroustrup的“使用C++的编程原则和实践”,我需要对我在第25.5.3节中发现的令人惊讶的部分进行澄清。作者声称如果我们想遍历std::vector,然后使用像这样的循环变量for(vector::size_typei=0;i不如对vector使用迭代器安全类:for(vector::iteratorp=v.begin();p!=v.end();++p)因为,作为无符号类型,i可能会溢出。他指出使用迭代器的循环没有这样的限制。我有点困惑,因为我了解到size_type保证足够大以表示可能的最大vector,因此size_type类型的变量永远不会在这样的

C++ vector::size_type:有符号与无符号;整数与长

我一直在通过在不同平台上编译我的应用程序来对其进行一些测试,从64位系统到32位系统的转变暴露出许多问题。我大量使用vector、字符串等,因此需要对它们进行计数。但是,我的函数也使用32位无符号数,因为在许多情况下我需要显式使用正整数。我在处理看似简单的任务时遇到了问题,例如std::min和std::max,它们可能更系统化。考虑以下代码:uint32_tgetmax(){return_vecContainer.size();}看起来很简单:我知道一个vector不能有负数的元素,所以返回一个无符号整数是完全合理的。voidsetRowCol(constuint32_t&r_row

c++ - C++ 11线程在分离后是否自动销毁

通常,我会假设C++11线程在分离后自动销毁。但问题是,我找不到任何东西来证明这个假设。根据thisarticleOncedetached,thethreadshouldlivethatwayforever.永远?如果线程的功能结束,它的资源是否永远保留?根据thisarticleAfteracalltothisfunction,thethreadobjectbecomesnon-joinableandcanbedestroyedsafely.它可以安全销毁,但它是自动销毁的吗?如果不是自动销毁,如何销毁(不是强制销毁,而是在线程函数结束后销毁)感谢阅读。

c++ - const auto 和 auto const 如何应用于指针?

我尝试了一些代码,想知道在使用auto时C++中的const限定符如何应用于指针类型。intmain(){intfoo=1;intbar=2;//Expected:constint*ptr_to_const_int=&foo;constautoptr_to_const_int=&foo;//Expected:int*constconst_ptr_to_int=&foo;autoconstconst_ptr_to_int=&foo;*ptr_to_const_int=3;//Thoughtthiswoulderror//ptr_to_const_int=&bar;Thisdoeserro

c++ - size_t ptrdiff_t 和地址空间

在我的系统上,ptrdiff_t和size_t都是64位。我想澄清两件事:我相信由于地址空间的限制,没有数组可以像size_t一样大。这是真的吗?如果是,那么是否可以保证ptrdiff_t能够保存最大数组中任何指针的减法结果? 最佳答案 不,没有这样的保证。例如,请参见此处:https://en.cppreference.com/w/cpp/types/ptrdiff_tIfanarrayissolarge(greaterthanPTRDIFF_MAXelements,butlessthanSIZE_MAXbytes),thatth